import pandas as pd

def main():
    # 1. 读取Excel文件
    try:
        # 读取文件内容
        df = pd.read_excel(r"C:\Users\admin\Desktop\student.xlsx")
        
        # 打印文件内容
        print("="*50)
        print("学生信息表内容：")
        print("="*50)
        print(df.to_string(index=False))
        print("\n" + "="*50)
        
    except FileNotFoundError:
        print("错误：找不到student.xlsx文件，请检查文件是否存在。")
        return
    except Exception as e:
        print(f"读取文件时发生错误：{str(e)}")
        return
    
    # 2. 按性别统计学生人数
    gender_counts = df['性别'].value_counts().reset_index()
    gender_counts.columns = ['性别', '人数']
    
    print("\n按性别统计学生人数：")
    print("-"*30)
    print(gender_counts.to_string(index=False))
    print("-"*30)
    
    # 3. 按年龄段统计学生人数
    # 定义年龄段划分
    bins = [15, 20, 30, 40, 50, 60, float('inf')]
    labels = ['15-19岁', '20-29岁', '30-39岁', '40-49岁', '50-59岁', '60岁及以上']
    
    # 新增年龄段列
    df['年龄段'] = pd.cut(df['年龄'], bins=bins, labels=labels, right=False)
    
    # 统计各年龄段人数
    age_group_counts = df['年龄段'].value_counts().reset_index()
    age_group_counts.columns = ['年龄段', '人数']
    # 按年龄段顺序排序
    age_group_counts = age_group_counts.set_index('年龄段').reindex(labels).reset_index()
    
    print("\n按年龄段统计学生人数：")
    print("-"*30)
    print(age_group_counts.to_string(index=False))
    print("-"*30)
    
    # 4. 按地区统计学生人数
    def parse_region(address):
        """解析地址，返回统计用的地区名称"""
        if '海南省' in address:
            # 海南省按市县统计
            parts = address.split('海南省')[1].strip()
            if '市' in parts:
                return parts.split('市')[0] + '市'
            elif '县' in parts:
                return parts.split('县')[0] + '县'
            elif '自治县' in parts:
                return parts.split('自治县')[0] + '自治县'
            else:
                return parts.split()[0]
        else:
            # 外省按省份统计
            if '省' in address:
                return address.split('省')[0] + '省'
            elif '自治区' in address:
                return address.split('自治区')[0] + '自治区'
            else:
                return address.split()[0]
    
    # 提取地区信息
    df['地区'] = df['家庭地址'].apply(parse_region)
    
    # 统计各地区人数
    region_counts = df['地区'].value_counts().reset_index()
    region_counts.columns = ['地区', '人数']
    
    print("\n按地区统计学生人数：")
    print("-"*30)
    print(region_counts.to_string(index=False))
    print("-"*30)

if __name__ == "__main__":
    main()
    